package com.class05.controller;

import com.class05.pojo.Person;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/pay")
public class HelloController {
//    动过id查询用户信息
//    一restful风格的接口：  restful风格                    普通方式                                                            xml方式
//    查询操作通常用 ：@GetMapping("/hello")    ==> @RequestMapping(value = "/hello",method = RequestMethod.GET)      ===> <select>
//    增加操作通常用 ：@PostMapping("/hello")   ==> @RequestMapping(value = "/hello",method = RequestMethod.POST)     ===> <insert>
//    修改操作通常用 ：@PutMapping("/hello")    ==> @RequestMapping(value = "/hello",method = RequestMethod.PUT)       ===> <update>
//    删除操作通常用 ：@DeleteMapping("/hello") ==> @RequestMapping(value = "/hello",method = RequestMethod.DELETE)  ===> <delete>

    // localhost:8080/hello/123
//    restful风格中，查询操作通常会用路径传的方式传递参数
    @GetMapping("/hello/{id}")
    public String hello(@PathVariable("id") String id) {
        return "hello world" + id;
    }


    //    增加操作，需要传递一个对象，用json格式传递，并使用@RequestBody接收
//    localhost:8080/insertPerson
//       ｛
//            "name":"张三",
//            "age":18
    //    ｝
    @PostMapping("/insertPerson")
    public String postPerson(@RequestBody Person person) {
        return person.toString();
    }


    //    修改操作，需要传递一个对象，用json格式传递，并使用@RequestBody接收
    @PutMapping("/updatePerson")
    public String updatePerson(@RequestBody Person person) {
        return person.toString();
    }


    //    删除操作，通常会用路径传参的方式传递参数，并且使用@PathVariable接收
    @DeleteMapping("/deletePerson/{id}")
    public String deletePerson(@PathVariable("id") String id) {
        return id;
    }


    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "hello world";
    }
//    建议在实际开发中，尽量明确请求方式
//    @RequestMapping(value = "/helloPost")
//    public String helloPost() {
//        return "hello world";
//    }



//    分页查询
//    localhost:8080/page?page=1&size=2
    @GetMapping("/page")
    public String page(@RequestParam(value = "page", defaultValue = "1" ,required = false ) int page,
                       @RequestParam(value = "size",defaultValue = "2",required = false) int size
                       ) {
//        制造数据
        List<Person>  personList = List.of(new Person("张三", 18), new Person("李四", 20), new Person("王五", 22));
//        模拟分页查询逻辑
//        limit size取前几条，skip跳过几条
//        map(Person::toString) 把person对象转换成字符串，reduce("") 把多个字符串拼接成一个字符串
        return personList.stream().limit(size).skip((page - 1) * size).map(Person::toString).reduce("", (a, b) -> a + "\n" + b);
    }

}
